1、SpringBoot项目创建完成之后默认会生成一个*Application的入口类,通过该类的main方法即可启动SpringBoot项目。
@SpringBootApplication public class SpringbootRunApplication { public static void main(String[] args) { SpringApplication.run(SpringbootRunApplication.class, args); } }
|
2、在此入口类中,我们可以看到SpringBoot创建的业务代码中的一个注解——@SpringBootApplication,这也是SpringBoot的核心注解。源代码如下:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {
@AliasFor( annotation = EnableAutoConfiguration.class ) Class<?>[] exclude() default {};
@AliasFor( annotation = EnableAutoConfiguration.class ) String[] excludeName() default {};
@AliasFor( annotation = ComponentScan.class, attribute = "basePackages" ) String[] scanBasePackages() default {};
@AliasFor( annotation = ComponentScan.class, attribute = "basePackageClasses" ) Class<?>[] scanBasePackageClasses() default {}; }
|
exclude:根据类排除不使用的自动配置
excludeName:根据类名排除不使用的自动配置;
scanBasePackages:扫描指定的包;
scanBasePackageClasses:扫描指定的类;
@SpringBootApplication = @SpringBootConfiguration(Configuration) + @EnableAutoConfiguration + @ComponentScan
Configuration: 普通配置类。
EnableAutoConfiguration: 开启自动化配置(Spring/SpringMVC那套东西都有了 )。可以根据类路径中的jar包依赖可以为项目进行一些自动配置。这也是SpringBoot最核心的功能。
ComponentScan: 用来指定扫描的组建所在的包路径或class文件(扫描启动类所在的包下面的所有类)。
如果忘记或不知道SpringBoot默认扫描的路径,随意创建包和类的位置,导致项目启动之后,无法实例化对应的组建,无法正确访问接口,那么我们就可以使用@ComponentScan来指定一些特殊的需要实例化的包或类,如下:
@SpringBootApplication(scanBasePackages = “com.example.controller")
@ComponentScan(basePackages = "com.example.controller")
|